Ruby 日記 20日目: レキシカルスコープとクラスの継承
#Ruby_日記 #2021-09-14
https://rex.libertyfish.co.jp/exam_histories/42141/user_answers/97ba1b3a-6d74-4944-b33b-8cc9d0d44667
次のプログラムを実行するとどうなりますか
code:gold/ex20/main.rb
class Ca
CONST = "001"
end
class Cb
CONST = "010"
end
class Cc
CONST = "011"
end
class Cd
CONST = "100"
end
module M1
class C0 < Ca
class C1 < Cc
class C2 < Cd
p CONST
class C2 < Cb
end
end
end
end
end
選択肢:
"001"と表示される
"010"と表示される
"011"と表示される
"100"と表示される
解説:
CONSTがレキシカルスコープに定義されていないので、スーパークラスを探索する。
C2クラスはCdクラスを継承しているので、Cdクラス内に定義された CONST = "100" が正解。
code:sh
# ruby gold/ex20/main.rb
"100"
/icons/hr.icon
C2クラスの継承順序を確認してみる。 p CONST を p self.ancestors に書き換えて実行
code:sh
# ruby gold/ex20/ancestors.rb
M1::C0::C1::C2, Cd, Object, Kernel, BasicObject